package com.ffapp.f9164.td.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import my.ByteUtils;
import my.FileUtils;

public class MessageUtil {

    private static byte[] fileContent;

    public static byte[] getUpgradeNotice(String path) {
        packetIndexs = 0;
        File file = new File(path);
//        BleLog.d("文件大小==="+file.length());
//        BleLog.d("文件大小long转byte==="+ ByteUtils.longToByteArray(file.length()));
//        BleLog.d("文件总包数(284KB/200B(每包暂定最大大小为200字节))==="+ (int)Math.ceil(file.length()/200d));
//        BleLog.d("文件总包数==="+ByteUtils.intToByteArray((int) Math.ceil(file.length()/200d)) );
//        BleLog.d("文件crc32码==="+FileUtils.getCRC32(path));
//        BleLog.d("文件crc32码String转byte==="+FileUtils.getCRC32(path).getBytes());

        byte[] data = new byte[3];
        data[0] = (byte) 0xfe;          //head(1)

        byte[] fileSize = new byte[4];
        fileSize = ByteUtils.long2byte(file.length());

        byte[] packetTotal = new byte[2];
        packetTotal = ByteUtils.int2byte((int) Math.ceil(file.length()/200d));

        byte[] crc16 = new byte[2];
        fileContent = FileUtils.readFileToByteArray(path);
        crc16 = CRC16Util.getCrc16(fileContent);


        crc16 = CRC16Util.getCrc16(crc16);
        data[1] = (byte) (1+fileSize.length+packetTotal.length+crc16.length);            //len(1)  长度
        data[2] = (byte) 0x4e;             //fc(1)  功能码

        byte[]  payload = byteMerger(fileSize,packetTotal,crc16);
        data = byteMerger(data,payload);

        byte[] cs = new byte[1];
        cs[0] = getXor(1,data.length,data);

        data = byteMerger(data,cs);

        return data;
    }

    public static byte[] byteMerger(byte[]... bytes){
        List<Byte> byteList = new ArrayList<>();
        for (int i = 0; i < bytes.length; i++) {
            for(byte bt: bytes[i]){
                byteList.add(bt);
            }
        }

        byte[] returnByte = new byte[byteList.size()];
        for (int i=0; i<byteList.size();i++){
            returnByte[i] = byteList.get(i);
        }

        return returnByte;
    }

    public static byte getXor(int start,int end,byte[]... bytes){
        List<Byte> byteList = new ArrayList<>();
        for (int i = 0; i < bytes.length; i++) {
            for(byte bt: bytes[i]){
                byteList.add(bt);
            }
        }
        byte temp = 0;
        for (int j= 0; j< byteList.size();j++){
            if(j!=0)
                temp ^= byteList.get(j);
        }

        return temp;
    }


    private static int packetIndexs = 0;
    public static byte[] sendDataOfFile(String path) {
        File file = new File(path);
        byte[] data = new byte[3];
        data[0] = (byte) 0xfe;          //head(1)

        byte[] packetIndex= new byte[2];
        packetIndex = ByteUtils.int2byte(packetIndexs);

        byte[] packetSize = new byte[2];
//        packetSize = ByteUtils.byte2int(fileContent[packetIndexs]);


        data[1] = (byte) (1+packetIndex.length);            //len(1)  长度
        data[2] = (byte) 0x46;             //fc(1)  功能码

//        byte[]  payload = byteMerger(fileSize,packetTotal,crc16);
//        data = byteMerger(data,payload);

        byte[] cs = new byte[1];
        cs[0] = getXor(1,data.length,data);

        data = byteMerger(data,cs);

        return data;
    }

}
